Le librerie (library) Arriviamo ad uno degli argomenti più importanti di questa puntata (l'ultimo di Exec) che permetterà di aprire gli altri più concreti. In "introduzione alle librerie", avevamo già accennato che cosa è una libreria e avevamo detto che un insieme di funzioni che permettono all'utente di pilotare correttamente il sistema in tutte le sue parti, dall'apertura di un file a quella di uno schermo. La libreria è composta da una struttura comprendente le informazioni di quest'ultima e una tabella di salti per le funzioni vere e proprie; la libreria, per poter utilizzare le sue funzioni, deve essere aperta mediante la chiamata: libreria = (struct Library *)OpenLibrary(nome,versione); dove "libreria" è il puntatore alla struttura Library della libreria e viene utilizzata per ogni chiamata a sue funzioni; "nome" è il puntatore ad una stringa contenente il nome della libreria e "versione" è una long che indica la versione della libreria (che corrisponde a quella del sistema esempio 32, 33, 36 ecc.). Qui occorre ricordare la famosa regola di Amiga: "quello che viene aperto deve essere chiuso"; per cui eccovi la funzione per chiudere la libreria prima dell'uscita dal vostro programma: CloseLibrary(libreria); dove libreria è il puntatore alla struttura Library ritornato da OpenLibrary. Il valore "libreria" non verrà mai utilizzato se non nella chiusura, perché nella chiamata alle funzioni di libreria, i parametri vengono passati per registri, mentre in una qualsiasi chiamata ad una funzione da C i parametri sono passati per stack; in realtà quindi, vengono chiamate delle funzioni presenti nella libreria del compilatore (solitamente Amiga.lib) che a loro volta passeranno i parametri dallo stack nei registri oppurtuni e qui chiameranno la funzione vera e propria mediante il puntatore "libreria"; perciò i puntatori alle strutture Library delle librerie da utilizzare vanno dichiarati dal programmatori come variabili esterne (o globali) con un nome ben preciso che non può essere mutato e che potete osservare nella tabella rispettiva.